/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.input;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IClientProfessionnel;
import fr.generali.accueilclient.client.om.IContact;
import fr.generali.accueilclient.client.om.ICoordonneeBancaire;
import fr.generali.refservcommuns.rce.gestionbancaire.dtogestionbancaire.DtoDossierP16;
import fr.generali.refservcommuns.rce.gestionbancaire.dtogestionbancaire.DtoListeDossierP16;
import fr.generali.refservcommuns.rce.gestionbancaire.gestionbancaireservice.GestionBancaire;
import fr.generali.refservcommuns.rce.servperscom.pty.referencebancaire.DtoAgenceBancaire;
import fr.generali.refservcommuns.rce.servperscom.pty.referencebancaire.DtoBanque;
import fr.generali.refservcommuns.rce.servperscom.pty.referencebancaire.DtoCompteBancaire;

/**
 * @author selrhazala
 */
@Component("contactProToGestionBancaireConverter")
public class ContactProToGestionBancaireConverter implements Converter<IContact, GestionBancaire> {

    /**
     * {@inheritDoc}
     */
    public GestionBancaire convert(IContact input) {
        GestionBancaire gestionBancaire = null;

        if (input != null) {
            IClientProfessionnel clientProfessionnel = IClientProfessionnel.class.cast(input.getClient());
            DtoDossierP16 dtoDossierP16 = new DtoDossierP16();

            // Si input.getCoordonneeBancaire() != null c'est que l'on souahite
            // modifier le rib
            if (input.getCoordonneeBancaire() != null) {
                ICoordonneeBancaire rib = input.getCoordonneeBancaire();

                DtoCompteBancaire dtoCompteBancaire = new DtoCompteBancaire();

                DtoBanque dtoBanque = new DtoBanque();
                dtoBanque.setNom(rib.getNomBanque());
                dtoBanque.setCodeBIC(rib.getBic());
                dtoCompteBancaire.setBanqueGestionnaire(dtoBanque);

                DtoAgenceBancaire dtoAgenceBancaire = new DtoAgenceBancaire();
                dtoAgenceBancaire.setCodeAgence(rib.getGuichet());
                dtoAgenceBancaire.setEnseigne(rib.getNomBanque());
                dtoCompteBancaire.setAgenceBancaire(dtoAgenceBancaire);

                StringBuffer codeIBAN = new StringBuffer();
                codeIBAN.append(rib.getIban1()).append(rib.getIban2()).append(rib.getIban3()).append(rib.getIban4())
                                .append(rib.getIban5()).append(rib.getIban6()).append(rib.getIban7());

                if (StringUtils.isNotEmpty(rib.getIban8())) {
                    codeIBAN.append(codeIBAN).append(rib.getIban8());
                    if (StringUtils.isNotEmpty(rib.getIban9())) {
                        codeIBAN.append(codeIBAN).append(rib.getIban9());
                    }
                }

                dtoCompteBancaire.setCodeIBAN(codeIBAN.toString());

                dtoCompteBancaire.getTitulaireCompteBancaire().add(rib.getTitulaire());
                dtoCompteBancaire.setNumOrdre(rib.getNumOrdre());

                if (StringUtils.isNotEmpty(rib.getIdentifiant())) {
                    int idRib = Integer.parseInt(rib.getIdentifiant()) + 1;
                    dtoCompteBancaire.setIdentifiant(String.valueOf(idRib));
                }

                // balise necessaire
                dtoCompteBancaire.setEtat(StringUtils.EMPTY);

                List<DtoCompteBancaire> listeCompteBancaire = new ArrayList<DtoCompteBancaire>();
                listeCompteBancaire.add(dtoCompteBancaire);

                if (rib.isPrincipal()) {
                    dtoDossierP16.setCompteBancairePrincipal(dtoCompteBancaire);
                } else {
                    dtoDossierP16.getCompteBancaireSecondaire().add(dtoCompteBancaire);
                }

                dtoDossierP16.setCodeUser("BC");
                dtoDossierP16.setIdentifiantPersonne(clientProfessionnel.getSphereProfessionnelle().getIdSpherePro());
            }

            DtoListeDossierP16 dtoListeDossierCB = new DtoListeDossierP16();
            List<DtoDossierP16> listeDossierCB = dtoListeDossierCB.getDossierP16();
            listeDossierCB.add(dtoDossierP16);

            gestionBancaire = new GestionBancaire();
            gestionBancaire.setDtoListeDossierP16(dtoListeDossierCB);
        }

        return gestionBancaire;
    }

}
